﻿#define _CRT_SECURE_NO_WARNINGS
//作者：宋安康
#include<stdio.h>
//struct Stu 
//{
//	char name[20];
//	int age;
//	float score;
//};
//int main() 
//{
//	struct Stu s = {"张三",20 , 90.5f};
//	struct Stu* L = &s;
//	//FILE* pf = fopen("data.txt","w");
//	FILE* pf = fopen("data.txt","r");
//	if (pf == NULL)
//	{
//		perror("fopen");
//		return 1;
//	}
//
//	//写文件
//	//int fprintf(FILE* stream,const char* format,...); 可变参数列表
//	//fprintf(pf,"%s %d %.2f",L->name,L->age,L->score);
//	fscanf(pf,"%s %d %f",L->name,&(L->age),&(L->score));
//	fprintf(stdout,"%s %d %.2f\n",L->name, L->age, L->score);
//	//关闭文件
//	fclose(pf);
//	pf = NULL;
//	printf("hello world\n");
//	return 0;
//}

//struct Stu
//{
//	char name[20];
//	int age;
//	float score;
//};
//int main()
//{
//	struct Stu s = { "sak",20 , 90.5f };
//	struct Stu* L = &s;
//	FILE* pf = fopen("data1.txt", "rb");
//	//FILE* pf = fopen("data1.txt", "wb");
//	if (pf == NULL)
//	{
//		perror("fopen");
//		return 1;
//	}
//	//二进制写文件
//	//fwrite(&s ,sizeof(s),1,pf);
//	//二进制读文件
//	fread(&s ,sizeof(s),1,pf );
//	printf("%s %d %.2f\n",L->name,L->age,L->score);
//	//关闭文件
//	fclose(pf);
//	pf = NULL;
//	printf("hello world\n");
//	return 0;
//}
//scanf  针对标准输入（键盘）的格式化的输入函数
//printf  针对标准输出（屏幕）的格式化的输出函数

//fscanf 针对所有输入流的格式化的输入函数
//fprintf  针对所有输出流的格式化的输出函数

//ssacnf    在字符串中读取一个格式化的数据
//sprintf  把格式化的数据转换成字符串
//typedef struct Stu
//{
//	char name[20];
//	int age;
//	float score;
//}stu;
//
//int main()
//{
//	stu s = {"sak",20 ,84.4f};
//	stu tmp = { 0 };
//	stu* L = &s;
//	stu* P = &tmp;
//	char arr[100] = {0};
//	//printf("%s %d %.2f\n",L->name,L->age,L->score);
//	sprintf(arr,"%s %d %.2f",L->name,L->age,L->score);  //把格式化的数据转换成字符串
//	printf("%s\n",arr);
//
//	//
//	//scanf("%s %d %f",P->name,&(P->age),&(P->score));
//	sscanf(arr,"%s %d %f",P->name,&(P->age),&(P->score));
//	printf("%s %d %.2f\n", P->name, P->age, P->score);
//
//	return 0;
//
//}

//文件的随机读写
//int fseek ( FILE * stream, long int offset, int origin );
//文件内容的光标
//int main() 
//{
//	FILE* pf = fopen("data2.txt","r");
//	if (pf ==NULL)
//	{
//		perror("fopen");
//		return 1;
//	}
//
//	//fseek(pf, 0, SEEK_SET);
//	//int h = ftell(pf);  //文件大小
//	
//	// 读文件
//	int ch = fgetc(pf);
//	printf("%c\n",ch);
//
//	ch = fgetc(pf);
//	printf("%c\n", ch);
//
//	ch = fgetc(pf);
//	printf("%c\n", ch);
//
//	ch = fgetc(pf);
//	printf("%c\n", ch);
//
//	ch = fgetc(pf);
//	printf("%c\n", ch);
//
//	fseek(pf, -2, SEEK_CUR);
//	fseek(pf, -2, SEEK_END);
//	fseek(pf, 1, SEEK_SET);
//	
//	ch = fgetc(pf);
//	printf("%c\n", ch);
//
//	//ftell
//	// long int ftell ( FILE * stream );
//	//返回⽂件指针相对于起始位置的偏移量
//	int n = ftell(pf);
//	printf("%d\n", n);
//	fclose(pf);
//	pf = NULL;
//	
//	return 1;
//}

//int main()
//{
//	FILE* pf = fopen("data2.txt", "r");
//	if (pf == NULL)
//	{
//		perror("fopen");
//		return 1;
//	}
//
//	// 读文件
//	int ch = fgetc(pf);
//	printf("%c\n", ch);
//
//	ch = fgetc(pf);
//	printf("%c\n", ch);
//
//	ch = fgetc(pf);
//	printf("%c\n", ch);
//
//	ch = fgetc(pf);
//	printf("%c\n", ch);
//
//	//void rewind ( FILE * stream );
//	//让⽂件指针的位置回到⽂件的起始位置
//	rewind(pf);
//
//	ch = fgetc(pf);
//	printf("%c\n", ch);
//	fclose(pf);
//	pf = NULL;
//
//	return 1;
//}

//文件读取结束的判定
//feof 的作⽤是：当⽂件读取结束的时候，判断是读取结束的原因是否是：遇到⽂件尾结束
//ferror  在文件读取结束后，判定是否是因为遇到错误而结束
//• fgetc 判断是否为 EOF .
//• fgets 判断返回值是否为 NULL .
//• fread判断返回值是否⼩于实际要读的个数。
//#include <stdlib.h>
//int main(void)
//{
//	int c; // 注意：int，⾮char，要求处理EOF
//	FILE* fp = fopen("data.txt", "r");
//	if (!fp) {
//		perror("File opening failed");
//		return EXIT_FAILURE;
//	}
//	//fgetc 当读取失败的时候或者遇到⽂件结束的时候，都会返回EOF
//	while ((c = fgetc(fp)) != EOF) // 标准C I/O读取⽂件循环
//	{
//		putchar(c);
//	}
//	//判断是什么原因结束的
//	if (ferror(fp))
//		puts("I/O error when reading");
//	else if (feof(fp))
//		puts("End of file reached successfully");
//	fclose(fp);
//}

//enum { SIZE = 5 };
//int main(void)
//{
//	double a[SIZE] = { 1.,2.,3.,4.,5. };
//	FILE* fp = fopen("test.bin", "wb"); // 必须⽤⼆进制模式
//	
//	fwrite(a, sizeof * a, SIZE, fp); // 写 double 的数组
//	fclose(fp);
//	
//	double b[SIZE];
//	fp = fopen("test.bin", "rb");
//	
//	size_t ret_code = fread(b, sizeof * b, SIZE, fp); // 读 double 的数组
//	if (ret_code == SIZE) {
//		puts("Array read successfully, contents: ");
//		for (int n = 0; n < SIZE; ++n) printf("%f ", b[n]);
//		putchar('\n');
//	}
//	else { // error handling
//		if (feof(fp))
//			printf("Error reading test.bin: unexpected end of file\n");
//		else if (ferror(fp)) {
//			perror("Error reading test.bin");
//		}
//	}
//	fclose(fp);
//}

//文件缓冲区
int main() 
{

	return 1;
}